function fo(x: string, y: string): string {
    return x + y
}
let fu = function (a: number, b: number): number {
    return a + b;
}

// 完整的写法
let fofu: (x: string, y: number) => string = function (x: string, y: number): string {
    return x + y;
}

// 函数的参数  形参默认值  ? 

// 函数重载
// 函数名相同 函数当中传入的数据类型不同
// 需求：当前有个函数函数的参数有可能是字符串有可能是数字  如果都是字符串 返回值就是字符串 如果都是数字返回值就是数字
/* function funfoo(x: string, y: string): string {
    return x + y
}

function funfoonum(x: number, y: number): number {
    return x + y
} */

/* function funfoostrnum(x: string | number, y: string | number){
    return x + y
}
 */
// 函数名形同，形成不同的多个函数
// 函数声明重载
function funfoo(x: string, y: string): string
function funfoo(x: number, y: number): number

// 写函数
function funfoo(x: string | number, y: string | number) {
    if (typeof x === "string" && typeof y === "string") {
        return x + y;
    } else if (typeof x === 'number' && typeof y === 'number') {
        return x + y;
    }
}

console.log(funfoo('str', 'hio'));
console.log(funfoo(44, 55));

/* 

当你定义一个函数或者对象或者类的时候，你确定你每次有知道你要使用的数据类型吗？
泛型：指在定义函数、接口或者类的时候不提前指定具体的数据类型 ，当使用时再指定具体的数据类
*/